package com.zzg.datastructure.tree.binarytree;

import lombok.AllArgsConstructor;

/**
 * @Author zhengzg
 * @Date 2022-09-26
 * @Version v1.0
 */
@AllArgsConstructor
public class ArrBinaryTree {

    /*
     * 1.顺序存储二叉树通常只考虑完全二叉树
     * 2.第n个元素的左子节点为 2 * n + 1
     * 3.第n个元素的右子节点为 2 * n + 2
     * 4.第n个元素的父节点为 （n - 1） / 2
     * 5.n：表示二叉树中的第几个元素（按照0开始编号）
     */

    /**
     * 存储数据节点的数组
     */
    private int[] arr;

    public void perOrder() {
        this.perOrder(0);
    }

    public void perOrder(int index) {
        // 判断数据是否为null
        if(arr == null || arr.length == 0) {
            System.out.println("数组为null，不能按照二叉树的前序遍历");
        }

        // 输出当前这个元素
        System.out.printf("%d ",arr[index]);

        // 向左递归遍历
        if ((index * 2 + 1) < arr.length) {
            perOrder(2 * index + 1);
        }

        // 向右递归遍历
        if ((index * 2 + 2) < arr.length) {
            perOrder(2 * index + 2);
        }
    }
}
